class NestedInteger(object):
    def __init__(self, value=None):
        """
        If value is not specified, initializes an empty list.
        Otherwise initializes a single integer equal to value.
        """

    def isInteger(self):
        """
        @return True if this NestedInteger holds a single integer, rather than a nested list.
        :rtype bool
        """

    def add(self, elem):
        """
        Set this NestedInteger to hold a nested list and adds a nested integer elem to it.
        :rtype void
        """

    def setInteger(self, value):
        """
        Set this NestedInteger to hold a single integer equal to value.
        :rtype void
        """

    def getInteger(self):
        """
        @return the single integer that this NestedInteger holds, if it holds a single integer
        Return None if this NestedInteger holds a nested list
        :rtype int
        """

    def getList(self):
        """
        @return the nested list that this NestedInteger holds, if it holds a nested list
        Return None if this NestedInteger holds a single integer
        :rtype List[NestedInteger]
        """


import collections


class Solution(object):
    def deserialize(self, s):
        """
        :type s: str
        :rtype: NestedInteger
        """
        n = len(s)
        if s[0] != '[':
            return NestedInteger(int(s))
        left = 0
        right = 0
        stack = collections.deque()
        while right < n:
            if s[right] == '[':
                stack.append([])
                left = right + 1
            if s[right] == ']':
                if right > left:
                    stack[-1].append(NestedInteger(int(s[left: right])))
                node = NestedInteger()
                for item in stack[-1]:
                    node.add(item)
                stack.pop()
                if stack:
                    stack[-1].add(node)
                    left = right + 1
                else:
                    return node
            if s[right] == ',':
                if right > left:
                    stack[-1].append(NestedInteger(int(s[left: right])))
                left = right + 1
            right += 1



data = Solution()
s = "[123,[456,[789]]]"
print(data.deserialize(s))
